/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deployment.entidade.registroimovel;

import br.com.deployment.entidade.localidade.Estado;
import br.com.deployment.entidade.localidade.Cidade;
import br.com.deployment.utilitario.TipoEndereco;
import br.com.deployment.utilitario.TipoLogradouro;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
import javax.persistence.*;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.Digits;
import javax.validation.constraints.NotNull;

/**
 *
 * @author roniere
 */
@Entity
@Table
public class Objeto implements Serializable {

    private static final long serialVersionUID = 1L;
    
    @Id
    @SequenceGenerator(name = "seq_objeto", sequenceName = "seq_objeto")
    @GeneratedValue(generator = "seq_objeto", strategy = GenerationType.SEQUENCE)
    private int id;
        
    @Column(columnDefinition="text")
    private String descricao;
    
    @Column(columnDefinition="text")
    private String frente;
    
    @Column(columnDefinition="text")
    private String fundo;
    
    @Column(columnDefinition="text")
    private String ladoEsquerdo;
    
    @Column(columnDefinition="text")
    private String ladoDireito;

    @NotNull(message="Tipo Endereço é requerido")
    @Enumerated(EnumType.STRING)
    private TipoEndereco tipo;
  
    @Enumerated(EnumType.STRING)
    private TipoLogradouro tipo_logradouro;
    
    @Column(length=200)
    private String logradouro;
    
    @Column(length=10)
    private String numero;
    
    @Column(length=20)
    private String bairro;
    
    @OneToOne
    private Cidade cidade;
    
    @OneToOne
    private Estado estado;
    
    @Column(length=50)
    private String pais;
    
    @Column(length=8)
    private String cep;
    
    @OneToMany(cascade= CascadeType.ALL, fetch= FetchType.EAGER)
    private List<GeoRef> geoReferenciamento;
    
    @Column(scale= 2, precision=19)
    @DecimalMin( value = "0.00" )
    @Digits( fraction = 2, integer = 10 )
    private BigDecimal areaOriginal;
    
    @Column(scale= 2, precision=19)
    @DecimalMin( value = "0.00" )
    @Digits( fraction = 2, integer = 10 )
    private BigDecimal areaAtual;
    
    public Objeto() {
    }

    public BigDecimal getAreaAtual() {
        return areaAtual;
    }

    public void setAreaAtual(BigDecimal areaAtual) {
        this.areaAtual = areaAtual;
    }

    public BigDecimal getAreaOriginal() {
        return areaOriginal;
    }

    public void setAreaOriginal(BigDecimal areaOriginal) {
        this.areaOriginal = areaOriginal;
    }
 
   public List<GeoRef> getGeoReferenciamento() {
        return geoReferenciamento;
    }

    public void setGeoReferenciamento(List<GeoRef> geoReferenciamento) {
        this.geoReferenciamento = geoReferenciamento;
    }
    
    
    

  
    
    public String getBairro() {
        return bairro;
    }

    public void setBairro(String bairro) {
        this.bairro = bairro;
    }

    public String getCep() {
        return cep;
    }

    public void setCep(String cep) {
        this.cep = cep;
    }

  
    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }


    public String getFrente() {
        return frente;
    }

    public void setFrente(String frente) {
        this.frente = frente;
    }

    public String getFundo() {
        return fundo;
    }

    public void setFundo(String fundo) {
        this.fundo = fundo;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getLadoDireito() {
        return ladoDireito;
    }

    public void setLadoDireito(String ladoDireito) {
        this.ladoDireito = ladoDireito;
    }

    public String getLadoEsquerdo() {
        return ladoEsquerdo;
    }

    public void setLadoEsquerdo(String ladoEsquerdo) {
        this.ladoEsquerdo = ladoEsquerdo;
    }

    public String getLogradouro() {
        return logradouro;
    }

    public void setLogradouro(String logradouro) {
        this.logradouro = logradouro;
    }

    public String getNumero() {
        return numero;
    }

    public void setNumero(String numero) {
        this.numero = numero;
    }

    public String getPais() {
        return pais;
    }

    public void setPais(String pais) {
        this.pais = pais;
    }

    public TipoEndereco getTipo() {
        return tipo;
    }

    public void setTipo(TipoEndereco tipo) {
        this.tipo = tipo;
    }

    public TipoLogradouro getTipo_logradouro() {
        return tipo_logradouro;
    }

    public void setTipo_logradouro(TipoLogradouro tipo_logradouro) {
        this.tipo_logradouro = tipo_logradouro;
    }

    public Cidade getCidade() {
        return cidade;
    }

    public void setCidade(Cidade cidade) {
        this.cidade = cidade;
    }

    public Estado getEstado() {
        return estado;
    }

    public void setEstado(Estado estado) {
        this.estado = estado;
    }
   
    
    


    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Objeto other = (Objeto) obj;
        if ((this.descricao == null) ? (other.descricao != null) : !this.descricao.equals(other.descricao)) {
            return false;
        }
        if ((this.frente == null) ? (other.frente != null) : !this.frente.equals(other.frente)) {
            return false;
        }
        if ((this.fundo == null) ? (other.fundo != null) : !this.fundo.equals(other.fundo)) {
            return false;
        }
        if ((this.ladoEsquerdo == null) ? (other.ladoEsquerdo != null) : !this.ladoEsquerdo.equals(other.ladoEsquerdo)) {
            return false;
        }
        if ((this.ladoDireito == null) ? (other.ladoDireito != null) : !this.ladoDireito.equals(other.ladoDireito)) {
            return false;
        }
        if (this.tipo != other.tipo) {
            return false;
        }
        if ((this.tipo_logradouro == null) ? (other.tipo_logradouro != null) : !this.tipo_logradouro.equals(other.tipo_logradouro)) {
            return false;
        }
        if ((this.logradouro == null) ? (other.logradouro != null) : !this.logradouro.equals(other.logradouro)) {
            return false;
        }
        if ((this.numero == null) ? (other.numero != null) : !this.numero.equals(other.numero)) {
            return false;
        }
        if ((this.bairro == null) ? (other.bairro != null) : !this.bairro.equals(other.bairro)) {
            return false;
        }
        if ((this.cidade == null) ? (other.cidade != null) : !this.cidade.equals(other.cidade)) {
            return false;
        }
        if ((this.estado == null) ? (other.estado != null) : !this.estado.equals(other.estado)) {
            return false;
        }
        if ((this.pais == null) ? (other.pais != null) : !this.pais.equals(other.pais)) {
            return false;
        }
        if ((this.cep == null) ? (other.cep != null) : !this.cep.equals(other.cep)) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 17 * hash + (this.descricao != null ? this.descricao.hashCode() : 0);
        hash = 17 * hash + (this.frente != null ? this.frente.hashCode() : 0);
        hash = 17 * hash + (this.fundo != null ? this.fundo.hashCode() : 0);
        hash = 17 * hash + (this.ladoEsquerdo != null ? this.ladoEsquerdo.hashCode() : 0);
        hash = 17 * hash + (this.ladoDireito != null ? this.ladoDireito.hashCode() : 0);
        hash = 17 * hash + (this.tipo != null ? this.tipo.hashCode() : 0);
        hash = 17 * hash + (this.tipo_logradouro != null ? this.tipo_logradouro.hashCode() : 0);
        hash = 17 * hash + (this.logradouro != null ? this.logradouro.hashCode() : 0);
        hash = 17 * hash + (this.numero != null ? this.numero.hashCode() : 0);
        hash = 17 * hash + (this.bairro != null ? this.bairro.hashCode() : 0);
        hash = 17 * hash + (this.cidade != null ? this.cidade.hashCode() : 0);
        hash = 17 * hash + (this.estado != null ? this.estado.hashCode() : 0);
        hash = 17 * hash + (this.pais != null ? this.pais.hashCode() : 0);
        hash = 17 * hash + (this.cep != null ? this.cep.hashCode() : 0);
        return hash;
    }

    @Override
    public String toString() {
        return "<b>Descricao:</b> " + descricao + 
                "<br/><b> Confrontações, "
                + (frente == "" ? "" : ("frente: </b> " + frente)) 
                + (fundo == null ? "" : (", <b>fundo:</b> " + fundo )) 
                + (ladoEsquerdo == null ? "" : (", <b>lado Esquerdo:</b> " + ladoEsquerdo)) 
                + (ladoDireito == null ? "" : (",<b> lado Direito:</b> "  + ladoDireito)) 
                + ", <br/> <b> Endereco: </b>"
                + (tipo == null ? "  na rua" : tipo) + " "
                + ( tipo_logradouro == null ? " " : tipo_logradouro ) + 
                " " + logradouro + ", " 
                + numero 
                + (bairro == null ? "" : (", <b> bairro </b>" + bairro)) 
                + ( cidade == null ? " " : (", <b> cidade </b>" + cidade + " - ") ) 
                + ( estado == null ? " " : estado) + ", <b> cep: </b>" + cep ;
    }

    
    

    
}
